package gestione_risorse_umane;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Set;

import database.GestioneCateringDB2;

import altro.Evento;

public class GestioneRisorseUmaneEvento extends ArchivioDipendentiInPiantaStabileObserver{
public  GestioneRisorseUmaneEvento() throws ClassNotFoundException
{
	aDStabili = new ArchivioDipendentiInPiantaStabile();
	// leggere da database
	interne = new ArrayList<Mansione>();
	esterne = new ArrayList<Mansione>();
}
	public void update(String mansione, int numero, String data) {
		System.out.println(mansione + " " + numero + " " + data);
	}
	
	public void printDipendentiDisponibiliPerMansione(String mansione, String data) throws ClassNotFoundException
	{
		GestioneCateringDB2 db = new GestioneCateringDB2();
		ArrayList<DipendentePiantaStabile> dipendenti = db.getDipendentiPiantaStabile();
		for(DipendentePiantaStabile d : dipendenti)
		{
			if(!d.containData(data) && d.getMansione().equalsIgnoreCase(mansione))
				System.out.println(d.getCF() + " " + d.getNome() + " " + d.getCognome() + " " + d.getMansione() + " " + d.getSesso());
		}
	}
	
	public void computeReclutamento(Evento e) throws ClassNotFoundException
	{
		ReclutamentoPersonale rp = new ReclutamentoPersonale(e);
		HashMap<String, Integer> personaleRichiesto = rp.getPersonaleRichiesto();
		
		Set<String> mansioni = personaleRichiesto.keySet();
		System.out.println("Personale richiesto");
		for(String m : mansioni)
		{
		
			System.out.println( m + " " + personaleRichiesto.get(m));
			if(personaleRichiesto.get(m) <= aDStabili.getNumeroPerMansione(m, e.getData()))
				{
						interne.add(new Mansione(m, personaleRichiesto.get(m), e.getData()));
				}
			else 
				{
					int differenza = personaleRichiesto.get(m) - aDStabili.getNumeroPerMansione(m, e.getData());
					interne.add(new Mansione(m, aDStabili.getNumeroPerMansione(m,e.getData()), e.getData()));
					esterne.add(new Mansione(m, differenza, e.getData()));
				}
		}
		System.out.println("------------------------\nPersonale interno\n-----------------------------");
		for(Mansione m : interne)
		{
			System.out.println(m.getMansione() + " " + m.getNumero() + " " + m.getData());
		}
		System.out.println("-------------------------------------\n Personale esterno\n-------------------------------");
		for(Mansione m: esterne)
		{
			System.out.println(m.getMansione() + " " + m.getNumero() + " " + m.getData());
		}
	}
private ArchivioDipendentiInPiantaStabile aDStabili;
//private ArchivioDipendentiInPiantaStabile disponibilitaInterne;
private ArrayList<Mansione> interne;
private ArrayList<Mansione> esterne;

}
